/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package desarrollosoft.ghce.vista.implementaciones;

import desarrollosoft.ghce.entidades.Paciente;
import desarrollosoft.ghce.servicio.interfaces.IServicioPacientes;
import desarrollosoft.ghce.vista.interfaces.Avisable;
import org.zkoss.zk.ui.Execution;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.VariableResolver;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;

/**
 *
 * @author ariel
 */
@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
public class ControladoraBajaLogicaPaciente extends SelectorComposer<Window> {

    @WireVariable("servicioPacientes")
    private IServicioPacientes servicioPacientes;
    
    private Paciente pacienteElegido;
    
    private Avisable componentePadre;
    
    @Wire
    private Window ventanaBajaLogica;
    
    @Wire
    private Textbox textboxCausas;
    
    @Wire
    private Datebox dateboxFechaSuceso;
    
    @Override
    public void doAfterCompose(Window comp) throws Exception {
        hacerAntesDeDibujar();
        super.doAfterCompose(comp);
        hacerDespuesDeDibujar();
    }
    
    private void hacerAntesDeDibujar() {
        // nada
    }
    
    private void hacerDespuesDeDibujar() {
        Execution ejecucion = Executions.getCurrent();
        pacienteElegido = (Paciente) ejecucion.getArg().get("pacienteElegido");
        componentePadre = (Avisable) ejecucion.getArg().get("avisable");
    }
    
    @Listen("onClick = #botonAceptar")
    public void clickBotonAceptar() {
        if (textboxCausas.getValue().isEmpty() || dateboxFechaSuceso.getValue() == null) {
            Messagebox.show("Asegurese de ingresar las causas y la fecha del suceso");
            return;
        }
        // pido confirmacion
        Messagebox.show("¿Confirma que desea dar de baja lógica al paciente?", "Confirme por favor",
                Messagebox.YES | Messagebox.NO, Messagebox.QUESTION,
                new EventListener() {
                    @Override
                    public void onEvent(Event evt) throws InterruptedException {
                        if (evt.getName().equals("onYes")) {
                            try {
                                // si confirma
                                servicioPacientes.eliminarLogicaPaciente(
                                        pacienteElegido,
                                        textboxCausas.getValue(),
                                        dateboxFechaSuceso.getValue()
                                );
                                componentePadre.seCerroVentanaHija("bajaLogica");
                                ventanaBajaLogica.detach(); // cierro la ventana
                            } catch (Exception ex) {
                                Messagebox.show(ex.toString());
                            }
                        }
                    }
                }
        );
    }
    
    @Listen("onClick = #botonCancelar")
    public void clickBotonCancelar() {
        componentePadre.seCerroVentanaHija("bajaLogica");
        ventanaBajaLogica.detach(); // cierro la ventana
    }
}
